# -*- coding: utf-8 -*-
# @Time    : 2022/7/28 14:21
# @Author  : Yanfeng
# @Email   : sxyanfeng2014@163.com
# @File    : functions_control.py
# @Software: PyCharm
import hashlib
import hmac
import uuid as uid
import datetime
import jsonpath as jsonpath
from util.mysqlUtils.db_pool import Database
from datetime import datetime, timedelta
import threading
import random
import re
import string
from decimal import Decimal, ROUND_HALF_UP

def md5(arg):
    '''
    md5加密
    :param arg:目标字符串
    :return: 加密后的字符串
    '''
    hash = hashlib.md5()
    hash.update(arg.encode("utf-8"))
    return hash.hexdigest()





def get_date_by_days(days):
    """
    返回7天前的日期。

    :return: datetime.date对象，表示7天前的日期
    """
    return (datetime.now() - timedelta(days=days)).date()


def get_uuid():
    '''
    生成 UUID
    :return:
    '''
    return uid.uuid1()

def randomint(length):
    '''
    生成指定长度随机数字
    :param length:
    :return:
    '''
    s = [str(i) for i in range(10)]
    return ''.join(random.sample(s, length))

def randomstr(length):
    '''
    生成指定长度随机数字和大小写字母组合
    :param length:
    :return:
    '''
    return ''.join(random.sample(string.ascii_letters + string.digits+ string.digits, length))

def now(pattern="%Y-%m-%d %H:%M:%S", minutes=0):
    '''
    生成当前时间 可格式化和设置时间偏移
    :param pattern: 格式如  %Y-%m-%d %H:%M:%S
    :param hours: 设置小时偏移量  如 hours=1 代表当前时间加一小时，支持负数
    :return:
    '''

    return (datetime.now() + timedelta(minutes=minutes)).strftime(pattern)
def get_data(day):
    pattern = "%Y-%m-%d"
    '''
    生成当前时间 可格式化和设置时间偏移
    :param pattern: 格式如  %Y-%m-%d
    :param hours: 设置小时偏移量  如 hours=1 代表当前时间加一小时，支持负数
    :return:
    '''

    return (datetime.now() + timedelta(days=day)).strftime(pattern)

def regex(target_str, pattern, index=0):
    '''
    正则匹配
    :param target_str: 目标字符串
    :param parttern: 正则表达式
    :param index: 列表索引
    :return: 所有匹配结果，列表形式
    '''
    results = re.findall(pattern, target_str)
    return results[index] if results != [] else results



def hmac_md5(key, message):
    key = key.encode('utf-8')
    message = message.encode('utf-8')
    # return hmac.new(key, message, hashlib.sha256).hexdigest()
    return hmac.new(key, message, hashlib.sha256).hexdigest()

def timestamp_to_tiem(timestamp):

    dt = datetime.datetime.fromtimestamp(timestamp)  # 转化为日期时间
    dt_str = dt.strftime('%Y-%m-%d %H:%M:%S')  # 格式化日期时间字符串
    dt = datetime.datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S')  # 转化为 datetime 类型
    return dt



def generate_random_number(num):
    random_number = "".join([str(random.randint(0, num - 1)) for _ in range(9)])
    return random_number

def get_json_res(erp,string):
    # string = json.dumps(string)
    return  jsonpath.jsonpath(string,erp)


def convert_decimal_to_places(decimal_value, num):
    """
    将Decimal值转换为指定小数位数的Decimal。

    参数:
    - decimal_value: Decimal对象，要转换的数值。
    - num: 整数，表示需要的小数位数。

    返回:
    - 一个新的Decimal对象，小数位数被量化为num位。
    """
    # 创建一个Decimal对象表示小数位数
    decimal_places = Decimal(f'0.{"1" * num}')

    # 使用quantize方法量化小数位数，使用ROUND_HALF_UP进行四舍五入
    quantized_value = decimal_value.quantize(decimal_places, rounding=ROUND_HALF_UP)

    return quantized_value

def chunk_list(lst, x):
    """
    将列表按照每批次 x 个元素进行拆分

    :param lst: 原始列表
    :param x: 每批次的元素数量
    :return: 包含多个子列表的列表，每个子列表最多包含 x 个元素
    """
    return [lst[i:i + x] for i in range(0, len(lst), x)]



class SequenceGenerator:
    def __init__(self):
        self.value = self.get_start()
        self.lock = threading.Lock()

    def next(self):
        with self.lock:
            result = self.value
            self.value += 1
        return result


    def get_start(self):
        sql = """SELECT MAX(platform_voucher_id) AS start FROM test_zhcxkj_center_promotion.`t_shopee_voucher`; """
        db = Database(r"C:\Users\guohan\Desktop\gh\flask_mock\config\shopeev2_config.yaml", "test_jdw_database")
        res1 = db.fetch_all(sql,())
        if res1[0]['start']:
            return res1[0]['start'] + 1
        else:
            return 1000







if __name__ == '__main__':
    # print(hmac_md5("70e6a5191de45204aea83ab722419dbf54ec1f6cb04a7794f57a5f400d01bb41", "2001656/api/v2/product/get_model_list16796218604373495257597376635870436c5251571308678"))
    # print(timestamp_to_tiem(1684339200))
    # print(convert_decimal_to_places(Decimal('123.456789'), 2))
    # print(convert_decimal_to_places(Decimal('123.450000'), 4))
    print(randomint(17))